<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

</body>
<script>
  // 1.使用setTimeout
  // setTimeout(() => {
  //   console.log("hello world");
  // }, 1000)

  // 参数 -> 函数
  // resolve, reject本身也是函数
  // new Promise((resolve, reject) => {
  //   // 第一次网络请求代码
  //   setTimeout(() => {
  //     resolve()
  //   }, 1000)
  // }).then(() => {
  //   // 第一次拿到结果处理代码
  //   console.log("hello 1");
  //
  //   return new Promise(((resolve, reject) => {
  //       // 第二次网络请求代码
  //       setTimeout(() => {
  //         resolve()
  //       }, 1000)
  //     })
  //   )
  // }).then(() => {
  //   // 第二次拿到结果处理代码
  //   console.log("hello 2");
  //
  //   return new Promise((resolve, reject) => {
  //     // 第三次网络请求代码
  //     setTimeout(() => {
  //       resolve()
  //     }, 1000)
  //   })
  // }).then(() => {
  //   // 第三次拿到结果处理代码
  //   console.log("hello 3");
  //
  //   return new Promise((resolve, reject) => {
  //     // 第四次网络请求代码
  //     setTimeout(() => {
  //       resolve()
  //     }, 1000)
  //   })
  // }).then(() => {
  //   // 第四次拿到结果处理代码
  //   console.log("hello 4");
  // })

  // Promise一般对异步进行封装
  // new -> 构造函数(保存一些信息,执行传入函数)
  // 执行传入的回调函数时会执行两个参数 resolve, reject 本身也是回调函数
  new Promise(((resolve, reject) => {
    setTimeout(() => {
      // 成功用resolve
      // resolve("hello world")
      // 失败用reject
      reject("error message")
    }, 1000)
  })).then(data => {
    // 处理代码
    console.log(data);
    console.log(data);
    console.log(data);
  }).catch(err => { // 失败异常
    console.log(err);
  })

  new Promise(((resolve, reject) => {
    setTimeout(() => {
      // resolve("hello world")
      reject("error message")
    }, 1000)
  })).then(date => {
    console.log(date);
  }, err => {
    console.log(err);
  })

</script>
</html>